package com.dts.view;



import com.dts.controller.ZhangWuController;
import com.dts.model.ZhangWu;

import java.util.Random;
import java.util.Scanner;

/*
 * 视图层，用户看到和操作的界面（用控制台去模拟）
 * 数据传递给controller层实现
 */
public class MainView {
    private ZhangWuController controller = new ZhangWuController();

    /*
     * 实现界面效果
     * 接收用户的输入
     * 根据输入，调用不同的功能方法
     */
    public void run() {
        //创建Scanner类对象，反复进行键盘输入
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("---------------管家婆家庭记账软件---------------");
            System.out.println("1.添加账务　2.编辑账务　3.删除账务　4.查询账务　5.退出系统");
            System.out.println("请输入要操作的功能序号[1-5]:");
            //接收用户的菜单选择
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
                    //选择添加账务，调用添加账务的方法
                    addZhangWu();
                    break;
                case 2:
                    //选择的编辑账务，调用编辑账务的方法
                    editZhangWu();
                    break;
                case 3:
                    //选择的删除账务，调用删除账务的方法
                    deleteZhangWu();
                    break;
                case 4:
                    //选择的查询账务，调用查询方法
                    selectZhangWu();
                    break;
                case 5:
                    System.exit(0);
                    break;
            }
        }
    }

    /*
     * 定义方法,实现账务删除
     * 实现思想：
     * 	接收用户的输入，输入一个主键数据
     * 	调用控制层方法，传递一个主键
     */
    public void deleteZhangWu() {
        //调用查询所有账务数据的功能，显示出来
        //看到所有数据，从中选择一项，进行删除
        select();
        System.out.println("选择的是删除功能,输入序号");
        String zwid = new Scanner(System.in).next();
        //调用控制层方法，传递主键id即可
        controller.deleteZhangWu(zwid);
        System.out.println("删除账务成功");
    }

    /*
     * 定义方法，实现对账务的编辑功能
     * 实现思想：
     * 	接收用户输入
     * 	数据的信息，封装成ZhangWu对象
     * 	调用控制层的方法，传递ZhangWu对象，实现编辑
     */
    public void editZhangWu() {
        //调用查询所有账务数据的功能，显示出来
        //看到所有数据，从中选择一项，进行修改
        select();
        System.out.println("选择的是编辑功能，请输入数据：");
        Scanner sc = new Scanner(System.in);
        //接收用户的数据
        System.out.print("输入ID：");
        String zwid = sc.next();
        System.out.println("输入分类名称");
        String flname = sc.next();
        System.out.println("输入金额");
        String money = sc.next();
        System.out.println("输入账户");
        String zhanghu = sc.next();
        System.out.println("输入日期:格式 XXXX-XX-XX");
        String createtime = sc.next();
        System.out.println("输入具体描述");
        String description = sc.next();
        //将所有用户输入的数据，封装到ZhangWu对象中
        //输入的ID，必须封装到对象中
        ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);
        //调用controller层中的方法，实现编辑账务
        controller.editZhangWu(zw);
        System.out.println("账务编辑成功");
    }

    /*
     * 定义方法，addZhangWu
     * 添加账务的方法，用户在界面中选择菜单1的时候调用
     * 实现思想：
     * 	接收键盘输入，5项输入，调用controller层方法
     */
    public void addZhangWu() {
        System.out.println("选择的添加账务功能，请输入以下内容");
        Scanner sc = new Scanner(System.in);
        System.out.println("输入分类名称");
        String flname = sc.next();
        System.out.println("输入金额");
        String money = sc.next();
        System.out.println("输入账户");
        String zhanghu = sc.next();
        System.out.println("输入日期:格式 XXXX-XX-XX");
        String createtime = sc.next();
        System.out.println("输入具体描述");
        String description = sc.next();
        //将接收到的数据，调用controller层方法，传递参数
        //将用户输入的所有参数，封装成ZhangWu对象
        ZhangWu zw = new ZhangWu(new Random().nextInt(10000) + "", flname, money, zhanghu, createtime, description);
        controller.addZhangWu(zw);
        System.out.println("添加账务成功");

    }

    /*
     * 定义方法selectZhangWu()
     * 显示查询的方式 1 所有查询 2 条件查询
     * 接收用户的选择
     */
    public void selectZhangWu() {
        System.out.println("1.查询所有     2.条件查询");
        Scanner sc = new Scanner(System.in);
        int selectChooser = sc.nextInt();
        //根据用户的选择，调用不同的功能
        switch (selectChooser) {
            case 1:
                //选择的是查询所有，调用查询所有的方法
                select();
                break;
            case 2:
                //选择的是条件查询，调用带有查询条件的方法
                select();
                break;
        }
    }


    /*
     * 输出账务数据方法,接收List集合，遍历集合，输出表格
     */
    public void select() {
        System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t说明");
        //遍历集合，将结果输出控制台
        for (ZhangWu zw : controller.select()) {
            if (zw == null) {
                continue;
            }
            System.out.println(zw.getZwid() + "\t\t" + zw.getFlname() + "\t\t" + zw.getZhanghu() + "\t\t" +
                    zw.getMoney() + "\t\t" + zw.getCreatetime() + "\t" + zw.getDescription());
        }
    }


}
